草庐IT

C++ operator+ 和 operator+= 重载

全部标签

c++ - array::operator[] 实际上是 noexcept 吗?

根据cppref,当前未指定重载noexcept。但我认为它们实际上是noexcept,对吧?由于不执行边界检查。所以没有像array::at这样的out_of_range异常.如果输入超出范围,就会发生低级段错误或访问冲突,这超出了C++异常范围(我猜)。 最佳答案 operator[]没有标记为noexcept的原因是它有一个“窄契约”,即要求索引值在范围内0...N-1。如果传递的值不在该范围内,则行为未定义,并且(谁知道?)函数可能会抛出异常。关于不将具有“狭义契约”的事物标记为noexcept,该标准非常一致。这被非正式地

c++ - 在 C++ 的子类中强制执行静态方法重载

我有这样的东西:classBase{public:staticintLolz(){return0;}};classChild:publicBase{public:intnothing;};templateintProduce(){returnT::Lolz();}和Produce();Produce();两者都返回0,这当然是正确的,但不需要。无论如何在第二个类中强制执行Lolz()方法的显式声明,或者在使用Produce()时可能抛出编译时错误?还是OO设计不好,我应该做一些完全不同的事情?编辑:我基本上想做的是做这样的事情:Managermanager;manager.Regist

c++ - 在 C++ 中重载 new、delete

我遇到这一行是stroustrup运算符函数必须是成员或至少采用一个用户定义类型的参数(重新定义new和delete运算符的函数不需要)。operatornew和operatordelete不是将用户定义的类型作为它们的参数之一吗?这是什么意思,我在这里遗漏了什么吗 最佳答案 Stroustrup的引述显然适用于运算符重载。C++语言仅支持用户定义类型的运算符重载。这意味着重载函数(operator)必须是用户定义类型的成员,或者是具有至少一个用户定义类型参数的独立函数。这正是相关引述的意思。但独立(非成员(member))oper

C++ 运算符重载

类和结构的运算符重载是否总是在编译时解决? 最佳答案 是的,一直都是。 关于C++运算符重载,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4077530/

Linux 删除文件提示:rm: cannot remove ‘XXXX‘: Operation not permitted 解决方案

       今天遇到一个很恼火的问题,就是在维护TP6项目时,无法在Linux中删除原有的vendor文件夹,更新进去新的内容,因为composer新require的必要的内容,本想着讲原有的删掉,直接讲压缩包放上去,解压,简单暴力,万万没想到。。。root@saas:/mnt/sites/saas#rm-rfvendorrm:cannotremove'xxxx':Operationnotpermittedrm:cannotremove'xxxx':Operationnotpermittedrm:cannotremove'xxxx':Operationnotpermittedrm:canno

c++ - C++ 中的重载函数

函数是重载函数吗?voidf(inta,intb){}voidf(int&a,int&b){}voidf(int*a,int*b){}voidf(constinta,constintb){}或者仅当参数的数量或类型不同时才会重载函数? 最佳答案 1、2、3号是。4号重新声明了1号。你看,顶级常量限定符不影响函数声明。它们改变了您在函数定义中使用它们的方式,但它仍然是相同的函数voidf(int);voidf(constint);//redeclaresvoidf(constintx)//sameasabove{x=4;//error

【C++】---命名空间,缺省参数,函数重载,内联函数等

C++入门一、命名空间1.命名空间(namespace)的定义(1)命名空间的格式:(2)命名空间可以嵌套(3)可以有多个命名空间2.域以及编译器的搜索原则3.namespace的三种使用方式二、C++的输入与输出注意:三、缺省参数1.缺省参数的定义2.缺省参数的分类四、函数重载1.函数重载的概念2.C++支持函数重载的原因五、引用1.引用的定义2.引用的特性3.使用场景(1)做参数(2)做返回值1.传值返回2.传引用返回3.传值和传引用的区别4.引用和指针引用和指针的不同点六、内联函数1.内联函数的概念2.特性七、auto和nullptr1.关键字:auto2.nullptr一、命名空间1.

c++ - 运算符的简单重载 = 不起作用

我正在修改我的integer类(这不是我最新的拷贝,但它适用于-std=c++0x)。我遇到了一个小问题:无论我做什么,一个简单的运算符重载都无法正常工作。这段代码:#include#include#includeclassinteger{private:std::dequevalue;public:integer(){}integeroperator=(intrhs){return*this;}};intmain(){integera=132;return0;}给我:error:conversionfrom‘int’tonon-scalartype‘integer’requested

c++ - 与运算符(operator)混淆

当我试图理解下面的代码时,我感到很困惑。任何人都可以解释这个黑客:a.*b或者如果a是一个指向类的指针:a->*b 最佳答案 这两个运算符都用于取消引用指向成员的指针。与常规指针不同,指向成员的指针本身不能取消引用,但必须应用于该类型的实际对象。这些二元运算符选择左侧的对象(或指针)并将指向成员的指针应用于它。structtest{inta,b,c;};intmain(){inttest::*ptr;ptr=&test::a;testt;t.*ptr=5;//sett.ato5ptr=&test::b;test*p=&t;p->*p

c++ - 没有用于调用的匹配函数...继承的 C++ 类中缺少重载

这个问题在这里已经有了答案:Inheritanceandmethodoverloading(1个回答)关闭9年前。谁能解释一下这是怎么回事。为什么编译器看不到类A中没有参数的hello()?structA{virtualvoidhello(){}virtualvoidhello(intarg){}};structB:A{virtualvoidhello(intarg){}};intmain(){B*b=newB();b->hello();return0;}g++main.cppmain.cpp:Infunction‘intmain()’:main.cpp:13:11:error:nom